package com.leyou.order.utils;

import com.github.wxpay.sdk.WXPay;
import com.github.wxpay.sdk.WXPayConfigImpl;
import com.leyou.common.exception.LyException;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.util.HashMap;
import java.util.Map;

@Slf4j
@Component
public class PayHelper {
    @Autowired
    private WXPay wxPay;
    @Autowired
    private WXPayConfigImpl wxPayConfig;
    //传入wx参数 返回一个url用于创建二维码
    public String getPayUrl(Long id,Long totalFee){
        // 请求参数：
        Map<String, String> data = new HashMap<String, String>();
        data.put("body", "乐优商城支付");
        data.put("out_trade_no",String.valueOf(id)); //这个是点单号
        data.put("total_fee", String.valueOf(totalFee)); //订单需要支付的金额
        data.put("spbill_create_ip", "123.12.12.123");
        data.put("notify_url", wxPayConfig.getNotifyUrl());
        data.put("trade_type", wxPayConfig.getPayType());  // 此处指定为扫码支付

        try {
            //支付返回参数
            Map<String, String> resp = wxPay.unifiedOrder(data);
            //校验微信的通信标志和交易标志是否正确
            checkReturnAndResultCode(resp);
            log.error("【微信统一下单】 获取url成功");
            return resp.get("code_url");
        } catch (Exception e) {
            throw new LyException(501,e.getMessage());
        }
    }

    //校验微信的通信标志和交易标志是否正确
    public void checkReturnAndResultCode(Map<String, String> resp) {
        //拿到 通信标志
        String returnCode = resp.get("return_code");
        if(!StringUtils.equals(returnCode,"SUCCESS")){
            //不一样 代表通信失败
            log.error("【微信统一下单】 通信失败");
            throw new LyException(501,"【微信统一下单】 通信失败");
        }
        //拿到 预交易标志
        String resultCode = resp.get("result_code");
        if(!StringUtils.equals(resultCode,"SUCCESS")){
            //不一样 代表预交易失败
            log.error("【微信统一下单】 预交易失败:{}",resp.get("err_code_des"));
            throw new LyException(501,"【微信统一下单】 预交易失败:"+resp.get("err_code_des"));
        }
    }

}
